<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>数组求和</title>
</head>
<body>
  <script>
    var arr = [10,20,30]

    // 方法一：
    var num1 = 0;
    for(var i=0;i<arr.length;i++) {
      num1 += arr[i]
    }
    console.log(num1,'num1')

    // 方法二：
    var num2 = 0;
    arr.forEach((item, index) => {
      num2 += item
    })
    console.log(num2,'num2')

    // 以上2种方法都没有什么亮点，面试的时候，要写出第三种方法
    /*
      reduce()方法，比较适合一些累计的过程
      reduce((summary, now) => {

      },init)
      1、reduce方法，第一个参数，是个回调函数，回调函数有2个必填参数
        （1）第一个参数summary是函数的返回值，
            第二个参数now是数组当前项的值

      2、初始值init不写的时候，summary初始默认是数组的第一个值arr[0],若是init为0，则summary初始默认值是0

      3、回调函数必须有返回值，返回值为下次循环中summary的值，若是没有返回值，则函数中默认返回undefined,则之后的循环中，summary值都是undefined

      4、init就相当于var num1 = 0;
        
    */

    var num3 = arr.reduce((num,now) => {
      return num = num + now  //这一次的return返回值是下一次中的num值
    },0)
    console.log(num3,'num3')

  </script>
</body>
</html>